import { IPSModelObject } from '../../ipsmodel-object';
import { IPSAppDEField } from '../../app/dataentity/ipsapp-defield';
import { IPSNavigateParamContainer } from '../ipsnavigate-param-container';
import { IPSDETreeNode } from './ipsdetree-node';
import { IPSDETreeNodeRSParam } from './ipsdetree-node-rsparam';
import { IPSDER1N } from '../../dataentity/der/ipsder1-n';

/**
 *
 * 子接口类型识别属性[]
 * @export
 * @interface IPSDETreeNodeRS
 */
export interface IPSDETreeNodeRS extends IPSModelObject, IPSNavigateParamContainer {
  /**
   * 下级节点对象
   *
   * @type {IPSDETreeNode}
   */
  getChildPSDETreeNode(): IPSDETreeNode | null;

  /**
   * 下级节点对象
   *
   * @type {IPSDETreeNode}
   */
  get childPSDETreeNode(): IPSDETreeNode | null;

  /**
   * 下级节点对象（必须存在）
   *
   * @type {IPSDETreeNode}
   */
  getChildPSDETreeNodeMust(): IPSDETreeNode;

  /**
   * 关系导航参数集合
   *
   * @type {IPSDETreeNodeRSParam[]}
   */
  getPSDETreeNodeRSParams(): IPSDETreeNodeRSParam[] | null;

  /**
   * 关系导航参数集合
   *
   * @type {IPSDETreeNodeRSParam[]}
   */
  get psDETreeNodeRSParams(): IPSDETreeNodeRSParam[] | null;

  findPSDETreeNodeRSParam(objKey: any): IPSDETreeNodeRSParam | null;

  /**
   * 父值过滤项
   * @type {string}
   */
  parentFilter: string;

  /**
   * 父关系连接属性
   *
   * @type {IPSAppDEField}
   */
  getParentPSAppDEField(): IPSAppDEField | null;

  /**
   * 父关系连接属性
   *
   * @type {IPSAppDEField}
   */
  get parentPSAppDEField(): IPSAppDEField | null;

  /**
   * 父关系连接属性（必须存在）
   *
   * @type {IPSAppDEField}
   */
  getParentPSAppDEFieldMust(): IPSAppDEField;

  /**
   * 父值关系
   *
   * @type {IPSDER1N}
   */
  getParentPSDER1N(): IPSDER1N | null;

  /**
   * 父值关系
   *
   * @type {IPSDER1N}
   */
  get parentPSDER1N(): IPSDER1N | null;

  /**
   * 父值关系（必须存在）
   *
   * @type {IPSDER1N}
   */
  getParentPSDER1NMust(): IPSDER1N;

  /**
   * 上级节点对象
   *
   * @type {IPSDETreeNode}
   */
  getParentPSDETreeNode(): IPSDETreeNode | null;

  /**
   * 上级节点对象
   *
   * @type {IPSDETreeNode}
   */
  get parentPSDETreeNode(): IPSDETreeNode | null;

  /**
   * 上级节点对象（必须存在）
   *
   * @type {IPSDETreeNode}
   */
  getParentPSDETreeNodeMust(): IPSDETreeNode;

  /**
   * 父值级别
   * @description 值模式 [树节点关系父节点层级] {1：上一级、 2：上两级、 3：上三级 }
   * @type {( number | 1 | 2 | 3)}
   */
  parentValueLevel: number | 1 | 2 | 3;

  /**
   * 搜索模式
   * @description 值模式 [树节点关系搜索模式] {1：有搜索时启用、 2：无搜索时启用、 3：全部启用 }
   * @type {( number | 1 | 2 | 3)}
   */
  searchMode: number | 1 | 2 | 3;
}
